package com.atguigu.gmall.product;

import java.util.Calendar;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @Author: 孙润达
 * @Date: 2022/1/11 20:15
 *
 * 异步编排
 */
public class CompletableFutureDemo {

    public static void main(String[] args) throws Exception {
        /*     *//*
         *线程池的参数
         * 第一个：线程的个数
         * 第二个：最大线程的个数
         * 第三个：最大线程的个数-线程的个数的线程存活时间
         * 第四个：阻塞队列new ArrayBlockingQueue<>(10)长度10
         * *//*
        //创建线程池
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                5,
                10,
                5,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(10)
        );
*//*        //创建多线程
        CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName());//打印线程的名称
            return 1231;
        }, threadPoolExecutor);
        //获取返回值
        System.out.println(integerCompletableFuture.get());*//*

    CompletableFuture.supplyAsync(()->{
        System.out.println(Thread.currentThread().getName()+"上一个任务");
        int a=10/0;
        return "上一个任务";
      },threadPoolExecutor).whenComplete((t,u)->{//计算完成时的回调方法
        System.out.println("t"+t);//上一个任务的返回值
        System.out.println(Thread.currentThread().getName()+"当前任务1");
        System.out.println("u"+u);//上一个任务的异常信息
//        int a=10/0;
        }).exceptionally(u->{     //exceptionally只处理异常，有异常是主线程运行
        System.out.println("u"+u);//上一个任务的异常信息也就是（当前任务1）
        return "";
    });
         *//*   .whenCompleteAsync((t,u)->{

      }).whenCompleteAsync((t,u)->{

      },threadPoolExecutor);*//*
    }*/

    }
}
